(function () {
    var STK = (function () {
        var that = {};
        var errorList = [];
        that.inc = function (ns, undepended) {
            return true
        };
        that.register = function (ns, maker) {
            var NSList = ns.split(".");
            var step = that;
            var k = null;
            while (k = NSList.shift()) {
                if (NSList.length) {
                    if (step[k] === undefined) {
                        step[k] = {}
                    }
                    step = step[k]
                } else {
                    if (step[k] === undefined) {
                        try {
                            step[k] = maker(that)
                        } catch (exp) {
                            errorList.push(exp)
                        }
                    }
                }
            }
        };
        that.regShort = function (sname, sfun) {
            if (that[sname] !== undefined) {
                throw"[" + sname + "] : short : has been register"
            }
            that[sname] = sfun
        };
        that.IE = /msie/i.test(navigator.userAgent);
        that.E = function (id) {
            if (typeof id === "string") {
                return document.getElementById(id)
            } else {
                return id
            }
        };
        that.C = function (tagName) {
            var dom;
            tagName = tagName.toUpperCase();
            if (tagName == "TEXT") {
                dom = document.createTextNode("")
            } else {
                if (tagName == "BUFFER") {
                    dom = document.createDocumentFragment()
                } else {
                    dom = document.createElement(tagName)
                }
            }
            return dom
        };
        that.log = function (str) {
            errorList.push("[" + ((new Date()).getTime() % 100000) + "]: " + str)
        };
        that.getErrorLogInformationList = function (n) {
            return errorList.splice(0, n || errorList.length)
        };
        return that
    })();
    $Import = STK.inc;
    STK.register("core.str.trim", function ($) {
        return function (str) {
            if (typeof str !== "string") {
                throw"trim need a string as parameter"
            }
            var len = str.length;
            var s = 0;
            var reg = /(\u3000|\s|\t|\u00A0)/;
            while (s < len) {
                if (!reg.test(str.charAt(s))) {
                    break
                }
                s += 1
            }
            while (len > s) {
                if (!reg.test(str.charAt(len - 1))) {
                    break
                }
                len -= 1
            }
            return str.slice(s, len)
        }
    });
    STK.register("core.evt.addEvent", function ($) {
        return function (sNode, sEventType, oFunc) {
            var oElement = $.E(sNode);
            if (oElement == null) {
                return false
            }
            sEventType = sEventType || "click";
            if ((typeof oFunc).toLowerCase() != "function") {
                return
            }
            if (oElement.addEventListener) {
                oElement.addEventListener(sEventType, oFunc, false)
            } else {
                if (oElement.attachEvent) {
                    oElement.attachEvent("on" + sEventType, oFunc)
                } else {
                    oElement["on" + sEventType] = oFunc
                }
            }
            return true
        }
    });
    STK.register("core.obj.parseParam", function ($) {
        return function (oSource, oParams, isown) {
            var key, obj = {};
            oParams = oParams || {};
            for (key in oSource) {
                obj[key] = oSource[key];
                if (oParams[key] != null) {
                    if (isown) {
                        if (oSource.hasOwnProperty[key]) {
                            obj[key] = oParams[key]
                        }
                    } else {
                        obj[key] = oParams[key]
                    }
                }
            }
            return obj
        }
    });
    STK.register("core.arr.isArray", function ($) {
        return function (o) {
            return Object.prototype.toString.call(o) === "[object Array]"
        }
    });
    STK.register("core.json.queryToJson", function ($) {
        return function (QS, isDecode) {
            var _Qlist = $.core.str.trim(QS).split("&");
            var _json = {};
            var _fData = function (data) {
                if (isDecode) {
                    return decodeURIComponent(data)
                } else {
                    return data
                }
            };
            for (var i = 0, len = _Qlist.length; i < len; i++) {
                if (_Qlist[i]) {
                    var _hsh = _Qlist[i].split("=");
                    var _key = _hsh[0];
                    var _value = _hsh[1];
                    if (_hsh.length < 2) {
                        _value = _key;
                        _key = "$nullName"
                    }
                    if (!_json[_key]) {
                        _json[_key] = _fData(_value)
                    } else {
                        if ($.core.arr.isArray(_json[_key]) != true) {
                            _json[_key] = [_json[_key]]
                        }
                        _json[_key].push(_fData(_value))
                    }
                }
            }
            return _json
        }
    });
    STK.register("core.obj.isEmpty", function ($) {
        return function (o, isprototype) {
            var ret = true;
            for (var k in o) {
                if (isprototype) {
                    ret = false;
                    break
                } else {
                    if (o.hasOwnProperty(k)) {
                        ret = false;
                        break
                    }
                }
            }
            return ret
        }
    });
    STK.register("core.util.cookie", function ($) {
        var that = {
            set: function (sKey, sValue, oOpts) {
                var arr = [];
                var d, t;
                var cfg = $.core.obj.parseParam({
                    expire: null,
                    path: "/",
                    domain: null,
                    secure: null,
                    encode: true
                }, oOpts);
                if (cfg.encode == true) {
                    sValue = escape(sValue)
                }
                arr.push(sKey + "=" + sValue);
                if (cfg.path != null) {
                    arr.push("path=" + cfg.path)
                }
                if (cfg.domain != null) {
                    arr.push("domain=" + cfg.domain)
                }
                if (cfg.secure != null) {
                    arr.push(cfg.secure)
                }
                if (cfg.expire != null) {
                    d = new Date();
                    t = d.getTime() + cfg.expire * 3600000;
                    d.setTime(t);
                    arr.push("expires=" + d.toGMTString())
                }
                document.cookie = arr.join(";")
            }, get: function (sKey) {
                sKey = sKey.replace(/([\.\[\]\$])/g, "\\$1");
                var rep = new RegExp(sKey + "=([^;]*)?;", "i");
                var co = document.cookie + ";";
                var res = co.match(rep);
                if (res) {
                    return res[1] || ""
                } else {
                    return ""
                }
            }, remove: function (sKey, oOpts) {
                oOpts = oOpts || {};
                oOpts.expire = -10;
                that.set(sKey, "", oOpts)
            }
        };
        return that
    });
    STK.register("core.str.parseURL", function ($) {
        return function (url) {
            var parse_url = /^(?:([A-Za-z]+):(\/{0,3}))?([0-9.\-A-Za-z]+\.[0-9A-Za-z]+)?(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
            var names = ["url", "scheme", "slash", "host", "port", "path", "query", "hash"];
            var results = parse_url.exec(url);
            var that = {};
            for (var i = 0, len = names.length; i < len; i += 1) {
                that[names[i]] = results[i] || ""
            }
            return that
        }
    });
    STK.register("core.json.jsonToQuery", function ($) {
        var _fdata = function (data, isEncode) {
            data = data == null ? "" : data;
            data = $.core.str.trim(data.toString());
            if (isEncode) {
                return encodeURIComponent(data)
            } else {
                return data
            }
        };
        return function (JSON, isEncode) {
            var _Qstring = [];
            if (typeof JSON == "object") {
                for (var k in JSON) {
                    if (k === "$nullName") {
                        _Qstring = _Qstring.concat(JSON[k]);
                        continue
                    }
                    if (JSON[k] instanceof Array) {
                        for (var i = 0, len = JSON[k].length; i < len; i++) {
                            _Qstring.push(k + "=" + _fdata(JSON[k][i], isEncode))
                        }
                    } else {
                        if (typeof JSON[k] != "function") {
                            _Qstring.push(k + "=" + _fdata(JSON[k], isEncode))
                        }
                    }
                }
            }
            if (_Qstring.length) {
                return _Qstring.join("&")
            } else {
                return ""
            }
        }
    });
    STK.register("core.util.URL", function ($) {
        return function (sURL, args) {
            var opts = $.core.obj.parseParam({isEncodeQuery: false, isEncodeHash: false}, args || {});
            var that = {};
            var url_json = $.core.str.parseURL(sURL);
            var query_json = $.core.json.queryToJson(url_json.query);
            var hash_json = $.core.json.queryToJson(url_json.hash);
            that.setParam = function (sKey, sValue) {
                query_json[sKey] = sValue;
                return this
            };
            that.getParam = function (sKey) {
                return query_json[sKey]
            };
            that.setParams = function (oJson) {
                for (var key in oJson) {
                    that.setParam(key, oJson[key])
                }
                return this
            };
            that.setHash = function (sKey, sValue) {
                hash_json[sKey] = sValue;
                return this
            };
            that.getHash = function (sKey) {
                return hash_json[sKey]
            };
            that.valueOf = that.toString = function () {
                var url = [];
                var query = $.core.json.jsonToQuery(query_json, opts.isEncodeQuery);
                var hash = $.core.json.jsonToQuery(hash_json, opts.isEncodeQuery);
                if (url_json.scheme != "") {
                    url.push(url_json.scheme + ":");
                    url.push(url_json.slash)
                }
                if (url_json.host != "") {
                    url.push(url_json.host);
                    if (url_json.port != "") {
                        url.push(":");
                        url.push(url_json.port)
                    }
                }
                url.push("/");
                url.push(url_json.path);
                if (query != "") {
                    url.push("?" + query)
                }
                if (hash != "") {
                    url.push("#" + hash)
                }
                return url.join("")
            };
            return that
        }
    });
    STK.register("core.util.browser", function ($) {
        var ua = navigator.userAgent.toLowerCase();
        var external = window.external || "";
        var core, m, extra, version, os;
        var numberify = function (s) {
            var c = 0;
            return parseFloat(s.replace(/\./g, function () {
                return (c++ == 1) ? "" : "."
            }))
        };
        try {
            if ((/windows|win32/i).test(ua)) {
                os = "windows"
            } else {
                if ((/macintosh/i).test(ua)) {
                    os = "macintosh"
                } else {
                    if ((/rhino/i).test(ua)) {
                        os = "rhino"
                    }
                }
            }
            if ((m = ua.match(/applewebkit\/([^\s]*)/)) && m[1]) {
                core = "webkit";
                version = numberify(m[1])
            } else {
                if ((m = ua.match(/presto\/([\d.]*)/)) && m[1]) {
                    core = "presto";
                    version = numberify(m[1])
                } else {
                    if (m = ua.match(/msie\s([^;]*)/)) {
                        core = "trident";
                        version = 1;
                        if ((m = ua.match(/trident\/([\d.]*)/)) && m[1]) {
                            version = numberify(m[1])
                        }
                    } else {
                        if (/gecko/.test(ua)) {
                            core = "gecko";
                            version = 1;
                            if ((m = ua.match(/rv:([\d.]*)/)) && m[1]) {
                                version = numberify(m[1])
                            }
                        }
                    }
                }
            }
            if (/world/.test(ua)) {
                extra = "world"
            } else {
                if (/360se/.test(ua)) {
                    extra = "360"
                } else {
                    if ((/maxthon/.test(ua)) || typeof external.max_version == "number") {
                        extra = "maxthon"
                    } else {
                        if (/tencenttraveler\s([\d.]*)/.test(ua)) {
                            extra = "tt"
                        } else {
                            if (/se\s([\d.]*)/.test(ua)) {
                                extra = "sogou"
                            }
                        }
                    }
                }
            }
        } catch (e) {
        }
        var ret = {
            OS: os,
            CORE: core,
            Version: version,
            EXTRA: (extra ? extra : false),
            IE: /msie/.test(ua),
            OPERA: /opera/.test(ua),
            MOZ: /gecko/.test(ua) && !/(compatible|webkit)/.test(ua),
            IE5: /msie 5 /.test(ua),
            IE55: /msie 5.5/.test(ua),
            IE6: /msie 6/.test(ua),
            IE7: /msie 7/.test(ua),
            IE8: /msie 8/.test(ua),
            IE9: /msie 9/.test(ua),
            SAFARI: !/chrome\/([\d.]*)/.test(ua) && /\/([\d.]*) safari/.test(ua),
            CHROME: /chrome\/([\d.]*)/.test(ua),
            IPAD: /\(ipad/i.test(ua),
            IPHONE: /\(iphone/i.test(ua),
            ITOUCH: /\(itouch/i.test(ua),
            MOBILE: /mobile/i.test(ua)
        };
        return ret
    });
    STK.register("core.dom.isNode", function ($) {
        return function (node) {
            return (node != undefined) && Boolean(node.nodeName) && Boolean(node.nodeType)
        }
    });
    STK.register("core.util.hideContainer", function ($) {
        var hideDiv;
        var initDiv = function () {
            if (hideDiv) {
                return
            }
            hideDiv = $.C("div");
            hideDiv.style.cssText = "position:absolute;top:-9999px;left:-9999px;";
            document.getElementsByTagName("head")[0].appendChild(hideDiv)
        };
        var that = {
            appendChild: function (el) {
                if ($.core.dom.isNode(el)) {
                    initDiv();
                    hideDiv.appendChild(el)
                }
            }, removeChild: function (el) {
                if ($.core.dom.isNode(el)) {
                    hideDiv && hideDiv.removeChild(el)
                }
            }
        };
        return that
    });
    window.WB2 = window.WB2 || {};
    WB2._config = WB2._config || {};
    WB2._config.host = "http://js.t.sinajs.cn";
    WB2._config.cssHost = "http://img.t.sinajs.cn";
    WB2._config.cdn_version = "20150130.02";
    window.WB2 = window.WB2 || {};
    WB2.Module = {
        loginButton: {
            versions: {
                "1.0": {
                    js: "loginButton{ver}.js?version=20140327",
                    css: "/t3/style/css/common/card.css?version=20140327"
                },
                latest: {
                    js: "loginButton.js?version=20140327",
                    css: "/t4/appstyle/widget/css/loginButton/loginButton.css"
                }
            }
        },
        followButton: {
            versions: {
                "1.0": {
                    js: "followButton{ver}.js",
                    css: "/t3/style/css/common/card.css?version=20140327"
                },
                latest: {
                    js: "followButton.js?version=20140327",
                    css: "/t4/appstyle/widget/css/followButton/followButtonSdk.css"
                }
            }
        },
        publish: {
            versions: {
                "1.0": {
                    js: "publish{ver}.js?version=20170712",
                    css: "/t3/style/css/thirdpart/rlsbox.css?version=20140327"
                },
                "1.1": {
                    js: "publish{ver}.js?version=20170712",
                    css: "/t35/appstyle/opent/css/widgets/js_weibo_send/js_weibo_send.css"
                },
                latest: {
                    js: "publish.js?version=20170712",
                    css: "/t4/appstyle/widget/css/weiboPublish/weiboPublish.css"
                }
            }
        },
        hoverCard: {
            versions: {
                "1.0": {
                    js: "hoverCard{ver}.js?version=20141124",
                    css: "/t3/style/css/common/card.css?version=20140327"
                }, latest: {js: "hoverCard.js?version=20141124", css: "/t4/appstyle/widget/css/weiboCard/weiboCard.css"}
            }
        },
        recommend: {
            versions: {
                "1.0": {js: "recommend{ver}.js"},
                latest: {js: "recommend.js", css: "/t3/style/css/thirdpart/interested.css"}
            }
        },
        selector: {
            versions: {
                "1.0": {
                    js: "selector{ver}.js?version=20140327",
                    css: "/t3/style/css/thirdpart/csuser.css"
                },
                latest: {
                    js: "selector.js?version=20140327",
                    css: "/t4/appstyle/widget/css/selector/selector.css?version=20150714"
                }
            }
        },
        shareRecommend: {
            versions: {
                "1.0": {js: "shareRecommend{ver}.js?version=20140327"},
                latest: {
                    js: "shareRecommend.js?version=20140327",
                    css: "/t4/appstyle/widget/css/weiboFamous/weiboFamous.css"
                }
            }
        },
        like: {
            versions: {
                "1.0": {js: "like{ver}.js?version=20140327"},
                latest: {
                    js: "like.js?version=20140327",
                    css: "/t4/appstyle/widget/css/praiseButton/praiseButton.css?version=20140327"
                }
            }
        },
        iframeWidget: {versions: {latest: {js: "iframeWidget.js?version=20140327"}}},
        invite: {
            versions: {
                "1.0": {js: "invite{ver}.js?version=20140327"},
                latest: {
                    js: "invite.js?version=20140327",
                    css: "http://img.t.sinajs.cn/t4/appstyle/V5_invite/css/module/frame/layer_frame.css"
                }
            }
        },
        quote: {versions: {"1.0": {js: "quote{ver}.js?version=20140327"}, latest: {js: "quote.js?version=20140327"}}}
    };
    STK.register("core.func.getType", function ($) {
        return function (oObject) {
            var _t;
            return ((_t = typeof(oObject)) == "object" ? oObject == null && "null" || Object.prototype.toString.call(oObject).slice(8, -1) : _t).toLowerCase()
        }
    });
    STK.register("core.dom.ready", function ($) {
        var funcList = [];
        var inited = false;
        var getType = $.core.func.getType;
        var browser = $.core.util.browser;
        var addEvent = $.core.evt.addEvent;
        var checkReady = function () {
            if (!inited) {
                if (document.readyState === "complete") {
                    return true
                }
            }
            return inited
        };
        var execFuncList = function () {
            if (inited == true) {
                return
            }
            inited = true;
            for (var i = 0, len = funcList.length; i < len; i++) {
                if (getType(funcList[i]) === "function") {
                    try {
                        funcList[i].call()
                    } catch (exp) {
                    }
                }
            }
            funcList = []
        };
        var scrollMethod = function () {
            if (checkReady()) {
                execFuncList();
                return
            }
            try {
                document.documentElement.doScroll("left")
            } catch (e) {
                setTimeout(arguments.callee, 25);
                return
            }
            execFuncList()
        };
        var readyStateMethod = function () {
            if (checkReady()) {
                execFuncList();
                return
            }
            setTimeout(arguments.callee, 25)
        };
        var domloadMethod = function () {
            addEvent(document, "DOMContentLoaded", execFuncList)
        };
        var windowloadMethod = function () {
            addEvent(window, "load", execFuncList)
        };
        if (!checkReady()) {
            if ($.IE && window === window.top) {
                scrollMethod()
            }
            domloadMethod();
            readyStateMethod();
            windowloadMethod()
        }
        return function (oFunc) {
            if (checkReady()) {
                if (getType(oFunc) === "function") {
                    oFunc.call()
                }
            } else {
                funcList.push(oFunc)
            }
        }
    });
    STK.register("conf.api.wbml", function ($) {
        window.WB2 = window.WB2 || {};
        var loadJs = function (sURL, oCallBack) {
            var js;
            js = parent.document.createElement("script");
            js.charset = "UTF-8";
            var IE = /msie/i.test(navigator.userAgent);
            if (IE) {
                js.onreadystatechange = function () {
                    if (js.readyState.toLowerCase() == "complete" || js.readyState.toLowerCase() == "loaded") {
                        oCallBack();
                        js.onreadystatechange = null
                    }
                }
            } else {
                js.onload = function () {
                    oCallBack();
                    js.onload = null
                }
            }
            js.src = sURL;
            parent.document.getElementsByTagName("head")[0].appendChild(js);
            return js
        };
        var WidgetLoad = {
            widgetCache: {}, loadCss: function (url) {
                css = document.createElement("link");
                css.href = url;
                css.type = "text/css";
                css.rel = "stylesheet";
                document.getElementsByTagName("head")[0].appendChild(css);
                WidgetLoad.widgetCache[url] = 1
            }, getWidgetFile: function (module, version) {
                var baseUrl = window.WB2._config.host + "/open/api";
                var cssHost = window.WB2._config.cssHost;
                var widgetModule = WB2.Module;
                var Module = widgetModule[module];
                if (!Module) {
                    throw ("Module " + module + " can not be found!")
                }
                Module = widgetModule[module]["versions"][version];
                if (!Module) {
                    Module = widgetModule[module]["versions"]["latest"]
                }
                var _js = Module.js.replace("{ver}", version);
                var _css = (Module.css != null ? Module.css : widgetModule[module]["versions"]["latest"]["css"]) || "";
                var js = baseUrl + "/js/widget/" + module + "/" + _js;
                var css = _css != "" ? (/^http:\/\//.test(_css) ? _css : cssHost + _css) : "";
                return {js: js, css: css}
            }, loadWidget: function (opts, callback) {
                var name = opts.module, version = opts.version, loadcss = opts.loadcss;
                var wFiles = this.getWidgetFile(name, version);
                var myCallBack = function () {
                    callback && callback(wFiles);
                    queue.next()
                };
                WidgetLoad._init(wFiles.js, myCallBack);
                if (!loadcss) {
                    return
                }
                if (wFiles.css && !this.widgetCache[wFiles.css]) {
                    this.loadCss(wFiles.css)
                }
            }, _init: function (url, callback) {
                if (WidgetLoad.widgetCache[url]) {
                    callback && callback()
                } else {
                    loadJs(url, function () {
                        WidgetLoad.widgetCache[url] = 1;
                        callback && callback()
                    })
                }
            }
        };
        var widgetObject = (function () {
            var that = {
                load: function (oArgs, oPara) {
                    var _moduleName = oArgs.module || "", _version, loadCss = true;
                    if (_moduleName == "") {
                        throw"no availiable module found."
                    }
                    if (typeof oPara === "string") {
                        _version = oPara || "latest"
                    } else {
                        if (typeof oPara === "object") {
                            _version = oPara.version || "latest";
                            loadCss = oPara.loadcss
                        }
                    }
                    var args = {module: _moduleName, version: _version, loadcss: loadCss};
                    if (_moduleName == "connectButton") {
                        _moduleName = "loginButton"
                    }
                    WidgetLoad.loadWidget(args, function (file) {
                        try {
                            WB2.widget[_moduleName].call(window, oArgs.params)
                        } catch (e) {
                            STK.common.log.monitor({
                                from: "jssdk",
                                url: file.js,
                                param: oArgs.params,
                                title: _moduleName,
                                error: e.toString()
                            });
                            throw e.toString()
                        }
                    });
                    return this
                }
            };
            var widgetModule = WB2.Module;
            for (var key in widgetModule) {
                if (key && widgetModule[key]) {
                    if (key == "loginButton") {
                        that.connectButton = (function (k) {
                            return function (args, opts) {
                                that.load({module: k, params: args}, opts)
                            }
                        })(key)
                    }
                    that[key] = (function (k) {
                        return function (args, opts) {
                            that.load({module: k, params: args}, opts)
                        }
                    })(key)
                }
            }
            return that
        })();
        return function () {
            var browser = $.core.util.browser;
            var tagInfo = [{tagName: "login-button", widgetName: "loginButton"}, {
                tagName: "publish",
                widgetName: "publish"
            }, {tagName: "share-recommend", widgetName: "shareRecommend"}, {
                tagName: "like",
                widgetName: "like"
            }, {tagName: "follow-button", widgetName: "iframeWidget"}, {
                tagName: "share-button",
                widgetName: "iframeWidget"
            }, {tagName: "list", widgetName: "iframeWidget"}, {
                tagName: "show",
                widgetName: "iframeWidget"
            }, {tagName: "topic", widgetName: "iframeWidget"}, {
                tagName: "comments",
                widgetName: "iframeWidget"
            }, {tagName: "livestream", widgetName: "iframeWidget"}, {
                tagName: "bulkfollow",
                widgetName: "iframeWidget"
            }, {tagName: "hotlist", widgetName: "iframeWidget"}, {
                tagName: "invite",
                widgetName: "invite"
            }, {tagName: "quote", widgetName: "quote"}];
            var getDomElementsNs = function (localName, xmlns) {
                xmlns = xmlns || "wb";
                var ua = navigator.userAgent.toLowerCase();
                var fullName = xmlns + ":" + localName;
                if (browser.IE) {
                    try {
                        var docNamespaces = document.namespaces;
                        if (docNamespaces && docNamespaces[xmlns]) {
                            return document.getElementsByTagName(localName).length == 0 ? document.getElementsByTagName(fullName) : document.getElementsByTagName(localName)
                        }
                    } catch (e) {
                    }
                    return document.getElementsByTagName(fullName)
                } else {
                    if (browser.MOZ) {
                        return document.getElementsByTagNameNS(document.body.namespaceURI, fullName)
                    } else {
                        return document.getElementsByTagName(fullName)
                    }
                }
            };
            var getDomAttribute = function (oCustomDom, tagName) {
                var attrArr = oCustomDom.attributes;
                var oAttr = {};
                for (var i = attrArr.length - 1; i >= 0; i--) {
                    var oAttrib = attrArr[i];
                    if (oAttrib.specified) {
                        oAttr[attrArr[i].name] = attrArr[i].value
                    }
                }
                oAttr.dom = oCustomDom;
                oAttr.tagName = tagName;
                return oAttr
            };
            var initCustomTag = function () {
                var widgetList = [];
                for (var i = 0, len = tagInfo.length; i < len; i++) {
                    var oTag = tagInfo[i];
                    var tagName = oTag.tagName;
                    var widget = oTag.widgetName;
                    var cDomList = getDomElementsNs(tagName);
                    for (var j = 0, wlen = cDomList.length; j < wlen; j++) {
                        cDomList[j].innerHTML = '<span style="background:url(http://timg.sjs.sinajs.cn/t4/appstyle/widget/images/library/base/loading1.gif) no-repeat;height:18px;padding:0 0 2px 20px;">Loading...</span>';
                        widgetList.push({tag: tagName, widget: widget, params: getDomAttribute(cDomList[j], tagName)})
                    }
                }
                var len = widgetList.length;
                if (len > 0) {
                    if (/weibo|ucbrowser/i.test(navigator.userAgent)) {
                        for (var i = 0, len = widgetList.length; i < len; i++) {
                            var oWidget = widgetList[i];
                            (function (ow) {
                                setTimeout(function () {
                                    widgetObject[ow.widget](ow.params)
                                }, i * 50)
                            })(oWidget)
                        }
                    } else {
                        WB2.anyWhere(function (W) {
                            for (var i = 0, len = widgetList.length; i < len; i++) {
                                var oWidget = widgetList[i];
                                (function (ow) {
                                    setTimeout(function () {
                                        W.widget[ow.widget](ow.params)
                                    }, i * 50)
                                })(oWidget)
                            }
                        })
                    }
                }
            };
            (function () {
                try {
                    if (document.namespaces && !document.namespaces.item.wb) {
                        document.namespaces.add("wb")
                    }
                } catch (e) {
                }
            }());
            WB2.initCustomTag = initCustomTag;
            $.core.dom.ready(function () {
                initCustomTag()
            })
        }
    });
    STK.register("core.json.jsonToStr", function ($) {
        function f(n) {
            return n < 10 ? "0" + n : n
        }

        if (typeof Date.prototype.toJSON !== "function") {
            Date.prototype.toJSON = function (key) {
                return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
            };
            String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (key) {
                return this.valueOf()
            }
        }
        var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            gap, indent,
            meta = {"\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\"}, rep;

        function quote(string) {
            escapable.lastIndex = 0;
            return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
                    var c = meta[a];
                    return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
                }) + '"' : '"' + string + '"'
        }

        function str(key, holder) {
            var i, k, v, length, mind = gap, partial, value = holder[key];
            if (value && typeof value === "object" && typeof value.toJSON === "function") {
                value = value.toJSON(key)
            }
            if (typeof rep === "function") {
                value = rep.call(holder, key, value)
            }
            switch (typeof value) {
                case"string":
                    return quote(value);
                case"number":
                    return isFinite(value) ? String(value) : "null";
                case"boolean":
                case"null":
                    return String(value);
                case"object":
                    if (!value) {
                        return "null"
                    }
                    gap += indent;
                    partial = [];
                    if (Object.prototype.toString.apply(value) === "[object Array]") {
                        length = value.length;
                        for (i = 0; i < length; i += 1) {
                            partial[i] = str(i, value) || "null"
                        }
                        v = partial.length === 0 ? "[]" : gap ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" : "[" + partial.join(",") + "]";
                        gap = mind;
                        return v
                    }
                    if (rep && typeof rep === "object") {
                        length = rep.length;
                        for (i = 0; i < length; i += 1) {
                            k = rep[i];
                            if (typeof k === "string") {
                                v = str(k, value);
                                if (v) {
                                    partial.push(quote(k) + (gap ? ": " : ":") + v)
                                }
                            }
                        }
                    } else {
                        for (k in value) {
                            if (Object.hasOwnProperty.call(value, k)) {
                                v = str(k, value);
                                if (v) {
                                    partial.push(quote(k) + (gap ? ": " : ":") + v)
                                }
                            }
                        }
                    }
                    v = partial.length === 0 ? "{}" : gap ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" : "{" + partial.join(",") + "}";
                    gap = mind;
                    return v
            }
        }

        return function (value, replacer, space) {
            var i;
            gap = "";
            indent = "";
            if (typeof space === "number") {
                for (i = 0; i < space; i += 1) {
                    indent += " "
                }
            } else {
                if (typeof space === "string") {
                    indent = space
                }
            }
            rep = replacer;
            if (replacer && typeof replacer !== "function" && (typeof replacer !== "object" || typeof replacer.length !== "number")) {
                throw new Error("JSON.stringify")
            }
            return str("", {"": value})
        }
    });
    STK.register("common.util.date", function () {
        var format = function (date, fmt) {
            var o = {
                "M+": date.getMonth() + 1,
                "d+": date.getDate(),
                "h+": date.getHours() % 12 == 0 ? 12 : date.getHours() % 12,
                "H+": date.getHours(),
                "m+": date.getMinutes(),
                "s+": date.getSeconds(),
                "q+": Math.floor((date.getMonth() + 3) / 3),
                S: date.getMilliseconds()
            };
            var week = {
                "0": "/u65e5",
                "1": "/u4e00",
                "2": "/u4e8c",
                "3": "/u4e09",
                "4": "/u56db",
                "5": "/u4e94",
                "6": "/u516d"
            };
            if (/(y+)/.test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length))
            }
            if (/(E+)/.test(fmt)) {
                fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[date.getDay() + ""])
            }
            for (var k in o) {
                if (new RegExp("(" + k + ")").test(fmt)) {
                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
                }
            }
            return fmt
        };
        return function (date, pattern) {
            date = date || new Date();
            pattern = pattern || "yyyy-MM-dd hh:mm:ss";
            return format(date, pattern)
        }
    });
    STK.register("conf.api.log", function ($) {
        var isConsoleEnable = typeof window.console == "object" && (typeof window.console.log == "function" || typeof window.console.log == "object");
        var panelId = "weibo_jssdk_console_panel";
        var minHeight = 30, maxHeight = 90;
        var Icon = {info: "#0088CC", warn: "#D2D128", error: "#F50A0A"};
        var cPanel = {
            init: function () {
                var pos = "position:fixed;";
                if ($.core.util.browser.IE6) {
                    pos = "position:absolute;"
                }
                var title = $.C("h5");
                title.innerHTML = 'Sina Weibo JSSDK Console Panel<a href="http://jssdk.sinaapp.com/help.php" target="_blank" style="position:absolute;right:0;margin-right:5px;color:#0088CC;font-size:12px;font-weight:normal;">Help?</a>';
                title.style.cssText = "margin: 8px;font-size:13px;border-bottom:1px solid #ccc;";
                var logDiv = $.C("div");
                logDiv.id = panelId + "_logdiv";
                logDiv.style.cssText = "background:#000; color:#FFF; margin:5px; border:1px solid #ccc; height:150px; max-height:150px; overflow-x:hidden; overflow-y: auto; word-break:nowrap; padding:5px 5px;border-radius:5px;";
                var textArea = $.C("textarea");
                textArea.value = 'WB2.console.log("test");';
                textArea.style.cssText = "line-height:20px;font-size:12px;width:380px;height:30px;overflow-y:auto;margin:3px;padding:5px; border-radius:5px;border:1px solid #ccc;";
                textArea.onfocus = function () {
                    textArea.select()
                };
                textArea.ondblclick = function () {
                    if (parseInt(textArea.style.height) < maxHeight) {
                        textArea.style.height = maxHeight + "px"
                    } else {
                        textArea.style.height = minHeight + "px"
                    }
                };
                var clear = $.C("input");
                clear.type = "button";
                clear.value = "Clear";
                clear.style.cssText = "width:60px;height: 30px;border:1px solid #ccc; padding:2px 15px;border-radius:5px 0 0 5px;";
                clear.onclick = function () {
                    logDiv.innerHTML = ""
                };
                var run = $.C("input");
                run.type = "button";
                run.value = "Run";
                run.style.cssText = "width:60px;height: 30px;border:1px solid #ccc; border-right:0;border-left:0; padding:2px 15px;";
                run.onclick = function () {
                    var val = textArea.value;
                    if (val) {
                        eval(val)
                    }
                };
                var close = $.C("input");
                close.type = "button";
                close.value = "Close";
                close.style.cssText = "width:60px;height: 30px;border:1px solid #ccc; padding:2px 15px;border-radius:0 5px 5px 0;";
                close.onclick = function () {
                    cPanel.hide()
                };
                var bar = $.C("p");
                bar.appendChild(clear);
                bar.appendChild(run);
                bar.appendChild(close);
                bar.style.cssText = "margin:5px 3px;";
                var panel = document.createElement("div");
                panel.id = panelId;
                panel.style.cssText = pos + "z-index:9999;left:0;top:0;width:400px;background:#eee;padding:5px;border-radius:5px;border:1px solid #bbb;";
                panel.appendChild(title);
                panel.appendChild(logDiv);
                panel.appendChild(textArea);
                panel.appendChild(bar);
                cPanel.output = logDiv;
                cPanel.close = close;
                cPanel.panel = panel;
                document.body.appendChild(panel)
            }, show: function () {
                if (!$.E(panelId)) {
                    cPanel.init()
                }
                cPanel.output = cPanel.output || $.E(panelId + "_logdiv");
                cPanel.panel && (cPanel.panel.style.display = "block")
            }, hide: function () {
                cPanel.panel && (cPanel.panel.style.display = "none")
            }, setLog: function (obj, level) {
                if (typeof obj == "string") {
                    var date = new Date(), now = $.common.util.date(new Date()), styles = "";
                    switch (level) {
                        case"info":
                            styles = Icon.info;
                            break;
                        case"warn":
                            styles = Icon.warn;
                            break;
                        case"error":
                            styles = Icon.error;
                            break
                    }
                    styles = "color:" + styles;
                    var html = '<p style="line-height:18px;margin:0;padding:0;"><span style="font-size:12px;color:#2EBC2C;">' + now + '</span><span style="font-size:12px;font-family: Verdana;padding-left:5px;' + styles + '">' + obj;
                    if (cPanel.output.innerHTML != "") {
                        html = html + "\r\n" + cPanel.output.innerHTML
                    }
                    cPanel.output.innerHTML = html + "</span></p>";
                    cPanel.output.scrollTop = 0
                }
            }, log: function (info, level) {
                cPanel.show();
                var output = "";
                if (typeof info == "object" || Object.prototype.toString.call(info) === "[object Array]") {
                    if (typeof info.parent === "object") {
                        output = info.toString()
                    } else {
                        output = $.core.json.jsonToStr(info, null, "\t")
                    }
                } else {
                    if (typeof info == "undefined") {
                        output = "undefined"
                    } else {
                        output = info.toString()
                    }
                }
                cPanel.setLog(output, level)
            }
        };
        var debugLevel = ["log", "info", "warn", "error", "dir"];
        return function () {
            window.WB2 = window.WB2 || {};
            window.WB2.console = window.WB2.console || {};
            window.WB2.console.init = function () {
                WB2._config.debug = true;
                isConsoleEnable = false
            };
            function init() {
                for (var i = 0, len = debugLevel.length; i < len; i++) {
                    var lv = debugLevel[i];
                    WB2.console[lv] = (function (level) {
                        return function (info) {
                            if (WB2._config.debug) {
                                if (isConsoleEnable) {
                                    window.console[level](info)
                                } else {
                                    try {
                                        cPanel.log(info, level)
                                    } catch (e) {
                                        cPanel.log(e.message, level)
                                    }
                                }
                            }
                        }
                    })(lv)
                }
            }

            init();
            var logList = {
                "USE_X-UA-Compatible": function () {
                    if (!$.core.util.browser.IE11) {
                        return
                    }
                    var isCompatible = false, cMeta;
                    var metas = document.getElementsByTagName("meta");
                    if (metas && metas.length > 0) {
                        for (var i = 0, len = metas.length; i < len; i++) {
                            if (metas[i].getAttribute("http-equiv") == "X-UA-Compatible") {
                                cMeta = metas[i];
                                if (metas[i].getAttribute("content").indexOf("IE7") != -1) {
                                    isCompatible = true
                                }
                                break
                            }
                        }
                    }
                    var ret = {output: true, reason: "Use X-UA-Compatible Model In Current Page. "};
                    return ret
                }
            };
            $.core.dom.ready(function () {
                for (var k in logList) {
                    var result = logList[k]();
                    if (result && result.output) {
                        WB2.console.warn(result.reason)
                    }
                }
            })
        }
    });
    var USER_STATUS;
    var APPKEY_AVAILABLE = true;
    var LOGIN_FUNC_LIST = [];
    var API_VERSION = 2;
    var OAUTH_QUERY_URL = "https://api.weibo.com/" + API_VERSION + "/oauth2/query";
    var OAUTH_LOGIN_WINDOW;
    var OAUTH_LOGIN_URL = "https://api.weibo.com/" + API_VERSION + "/oauth2/authorize";
    var JS_CACHE = {};
    var $ = STK;
    var parseParam = $.core.obj.parseParam, addEvent = $.core.evt.addEvent, trim = $.core.str.trim,
        browser = $.core.util.browser, CookieUtil = $.core.util.cookie, queryToJson = $.core.json.queryToJson;
    var jsonp = function (oOpts) {
        var opts = {
            url: "",
            charset: "UTF-8",
            timeout: 30 * 1000,
            args: {},
            onComplete: null,
            onTimeout: null,
            responseName: null,
            varkey: "callback"
        };
        var funcStatus = -1;
        opts = parseParam(opts, oOpts);
        var uniqueID = opts.responseName || ("STK_" + Math.floor(Math.random() * 1000) + new Date().getTime().toString());
        opts.args[opts.varkey] = uniqueID;
        var completeFunc = opts.onComplete;
        var timeoutFunc = opts.onTimeout;
        window[uniqueID] = function (oResult) {
            if (funcStatus != 2 && completeFunc != null) {
                funcStatus = 1;
                completeFunc(oResult)
            }
        };
        opts.onComplete = null;
        opts.onTimeout = function () {
            if (funcStatus != 1 && timeoutFunc != null) {
                funcStatus = 2;
                timeoutFunc()
            }
        };
        return loadJs(opts)
    };
    var loadJs = function (oOpts) {
        var js, requestTimeout;
        var opts = {
            url: "",
            charset: "UTF-8",
            timeout: 30 * 1000,
            args: {},
            onComplete: null,
            onTimeout: null,
            uniqueID: null
        };
        opts = parseParam(opts, oOpts);
        if (opts.url == "") {
            throw"url is null"
        }
        js = document.createElement("script");
        js.charset = "UTF-8";
        var IE = /msie/i.test(navigator.userAgent);
        if (opts.onComplete != null) {
            if (IE) {
                js.onreadystatechange = function () {
                    if (js.readyState.toLowerCase() == "complete" || js.readyState.toLowerCase() == "loaded") {
                        clearTimeout(requestTimeout);
                        opts.onComplete();
                        js.onreadystatechange = null
                    }
                }
            } else {
                js.onload = function () {
                    clearTimeout(requestTimeout);
                    opts.onComplete();
                    js.onload = null
                }
            }
        }
        var jsonToQuery = function (oArgs) {
            if (oArgs) {
                var _query = [];
                for (var p in oArgs) {
                    _query.push(p + "=" + encodeURIComponent(trim(oArgs[p])))
                }
                if (_query.length) {
                    return _query.join("&")
                } else {
                    return ""
                }
            }
        };
        var query = jsonToQuery(opts.args);
        if (opts.url.indexOf("?") == -1) {
            if (query != "") {
                query = "?" + query
            }
        } else {
            if (query != "") {
                query = "&" + query
            }
        }
        js.src = opts.url + query;
        document.getElementsByTagName("head")[0].appendChild(js);
        if (opts.timeout > 0 && opts.onTimeout != null) {
            requestTimeout = setTimeout(function () {
                opts.onTimeout()
            }, opts.timeout)
        }
        return js
    };
    var Queue = function () {
        this.started = 1;
        this.taskList = [];
        this.setStatue = function (statue) {
            this.started = statue
        };
        this.start = function () {
            this.setStatue(0);
            var i, method, args, pointer;
            var fun = this.taskList.shift();
            var method = fun[0], args = fun[1], pointer = fun[2];
            method.apply(pointer, args)
        };
        this.next = function () {
            this.setStatue(1);
            if (this.taskList.length > 0) {
                this.start()
            }
        };
        this.add = function (oFunc, oOpts) {
            var opts = {args: [], pointer: window, top: false};
            opts = parseParam(opts, oOpts);
            if (opts.top) {
                this.taskList.unshift([oFunc, opts.args, opts.pointer])
            } else {
                this.taskList.push([oFunc, opts.args, opts.pointer])
            }
            if (this.started) {
                this.start()
            }
        }
    };
    var queue = new Queue();

    function initCommunicate(options) {
        var ver = WB2._config.version, instances = WB2.anyWhere._instances, blankIframe = instances[ver];
        if (blankIframe) {
            if (blankIframe.contentWindow._ready) {
                blankIframe.contentWindow.request(options)
            } else {
                WB2.addToCallbacks(blankIframe.contentWindow, options)
            }
        } else {
            WB2.delayCall(options)
        }
    }

    function anyWhere(callback) {
        var oRequest = {requestType: "anywhere", callback: callback};
        regIframeRequest(oRequest)
    }

    function regIframeRequest(options) {
        var oRequest = options || {};
        var myCallBack = function () {
            initCommunicate(oRequest);
            queue.next()
        };
        var init = function (oCallback) {
            if (JS_CACHE.bundle) {
                oCallback && oCallback()
            } else {
                loadJs({
                    url: WB2._config.host + "/open/api/js/api/bundle.js?version=" + WB2._config.cdn_version,
                    onComplete: function () {
                        JS_CACHE.bundle = 1;
                        oCallback && oCallback()
                    }
                })
            }
        };
        queue.add(init, {args: [myCallBack]})
    }

    function clientInfo() {
        var scripts = document.getElementsByTagName("script");
        var len = scripts.length, index = 0, weiboJs, url, appkey, secret, version;
        if (len > 0) {
            weiboJs = scripts[index++];
            while (weiboJs) {
                if (weiboJs.src.indexOf("api/js/wb.js") != -1) {
                    url = weiboJs.src.split("?").pop();
                    break
                }
                weiboJs = scripts[index++]
            }
        }
        url = url.toLowerCase();
        var oPara = queryToJson(url);
        appkey = oPara.appkey || "";
        secret = oPara.secret || "";
        debug = oPara.debug || false;
        version = oPara.version || 1;
        return {appkey: appkey, secret: secret, debug: debug, version: version}
    }

    function loginReady(oFunc, bStart) {
        var i, len;
        if (oFunc != null) {
            if (bStart == true) {
                LOGIN_FUNC_LIST.unshift(oFunc)
            } else {
                LOGIN_FUNC_LIST.push(oFunc)
            }
        }
        if (WB2.checkLogin()) {
            for (i = 0, len = LOGIN_FUNC_LIST.length; i < len; i++) {
                LOGIN_FUNC_LIST[i].call()
            }
            LOGIN_FUNC_LIST = []
        }
    }

    function showLogin(oArgs) {
        var url = $.core.util.URL(OAUTH_LOGIN_URL), iWidth = 600, iHeight = 455;
        url.setParam("client_id", oArgs.appkey);
        url.setParam("response_type", "token");
        url.setParam("display", "js");
        url.setParam("transport", "html5");
        url.setParam("referer", encodeURI(document.location.href));
        OAUTH_LOGIN_WINDOW = window.open(url, "oauth_login_window", "width=" + iWidth + ",height=" + iHeight + ",toolbar=no,menubar=no,resizable=no,status=no,left=" + (screen.width - iWidth) / 2 + ",top=" + (screen.height - iHeight) / 2);
        if (OAUTH_LOGIN_WINDOW) {
            OAUTH_LOGIN_WINDOW.focus()
        }
        return
    }

    function messageHandler(event) {
        if ((/\api.weibo\.com$/).test(event.origin)) {
            var data = event.data;
            data = unescape(data);
            data = queryToJson(data);
            if (data.error_code) {
                data.success = -1;
                data.status = -1
            } else {
                data.success = 1;
                data.status = 1
            }
            loginCallBack(data)
        }
    }

    function loginCallBack(data) {
        WB2.console.log(data);
        loginStatus(data.status);
        if (data.success == 1) {
            Cookie.save(data);
            loginReady()
        } else {
            LOGIN_FUNC_LIST.pop()
        }
    }

    function login(oCallBack) {
        if (!APPKEY_AVAILABLE) {
            return
        }
        loginReady(oCallBack, true);
        if (!WB2.checkLogin()) {
            if (window.postMessage && !browser.IE) {
                showLogin({appkey: WB2._config.appkey})
            } else {
                regIframeRequest({appkey: WB2._config.appkey, requestType: "login", callback: loginCallBack})
            }
        }
    }

    function logout(oCallBack) {
        if (!WB2.checkLogin()) {
            return
        }
        if (WB2._config.appkey != null) {
            Cookie.del();
            loginStatus(-1);
            WB2._config.access_token = null;
            delete WB2._config.access_token;
            try {
                jsonp({
                    url: "https://api.weibo.com/2/account/end_session.json?source=" + WB2._config.appkey,
                    onComplete: function (o) {
                        oCallBack && oCallBack(o.data)
                    }
                })
            } catch (e) {
                throw"JavaScript SDK: logout error"
            }
        }
    }

    function loginStatus(status) {
        if (status == null) {
            return
        }
        USER_STATUS = status
    }

    function checkLogin() {
        return USER_STATUS == 1
    }

    var Cookie = {
        load: function () {
            if (!$.core.obj.isEmpty(WB2.oauthData)) {
                return WB2.oauthData
            } else {
                var _cookie = CookieUtil.get("weibojs_" + WB2._config.appkey);
                _cookie = unescape(_cookie);
                var oCookie = queryToJson(_cookie);
                return oCookie
            }
        }, save: function (oCookie) {
            WB2.oauthData = oCookie;
            var _cookie = "access_token=" + (oCookie.access_token || "") + "&refresh_token=" + (oCookie.refresh_token || "") + "&expires_in=" + (oCookie.expires_in || 0) + "&uid=" + (oCookie.uid || "") + "&status=" + (oCookie.status || USER_STATUS || -1);
            CookieUtil.set("weibojs_" + WB2._config.appkey, _cookie, {path: "/", domain: document.domain})
        }, del: function () {
            WB2.oauthData = {};
            CookieUtil.remove("weibojs_" + WB2._config.appkey, {path: "/", domain: document.domain})
        }
    };

    function getLoginStatus(options) {
        var oCookie = options || Cookie.load();
        var access_token = oCookie.access_token || "";
        var expires_in = oCookie.expires_in || "";
        if (access_token != "") {
            USER_STATUS = 1
        }
        jsonp({
            url: OAUTH_QUERY_URL, onComplete: function (oData) {
                WB2.console.log(oData);
                oData = oData || {};
                if (oData.status == 1 && oData.access_token) {
                    Cookie.save(oData);
                    WB2._config.access_token = oData.access_token;
                    WB2._config.uid = oData.uid
                }
                if (oData.error) {
                    APPKEY_AVAILABLE = false;
                    WB2.console.warn(oData.error);
                    if (oData.error == "xd2.jsp has not Referer!") {
                        WB2.console.warn("您使用的appkey未和域名进行绑定，请绑定后使用。")
                    }
                    return
                }
                USER_STATUS = oData.status;
                loginReady()
            }, args: {source: WB2._config.appkey}
        })
    }

    var init = function (opts) {
        if (opts.access_token) {
            USER_STATUS = 1;
            APPKEY_AVAILABLE = true;
            var oData = {status: USER_STATUS, access_token: opts.access_token};
            if (opts.uid) {
                oData.uid = opts.uid
            }
            Cookie.save(oData)
        }
    };
    window.WB2 = window.WB2 || {};
    WB2.widget = {};
    var sdkClient = clientInfo();
    WB2._config = WB2._config || {};
    WB2._config.version = sdkClient.version;
    WB2._config.appkey = sdkClient.appkey;
    WB2._config.secret = sdkClient.secret;
    WB2._config.debug = sdkClient.debug;
    WB2.oauthData = {};
    WB2.init = init;
    WB2.login = login;
    WB2.logout = logout;
    WB2.checkLogin = checkLogin;
    WB2.anyWhere = anyWhere;
    WB2.anyWhere._instances = {};
    WB2.Cookie = Cookie;
    WB2.regIframeRequest = regIframeRequest;
    $.conf.api.log();
    $.conf.api.wbml();
    WB2._config.appkey && getLoginStatus();
    if (window.postMessage && !browser.IE) {
        $.core.evt.addEvent(window, "message", messageHandler)
    }
})();